﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Owin;
using CorreoSocialWeb.Models;
using CorreoSocialWeb.Views;

namespace CorreoSocialWeb.Envios
{
    public partial class ListaDeEnvios : System.Web.UI.Page
    {
        public IQueryable GridView_GetData(int startRowIndex, int maximumRows, out int totalRowCount)
        {
            var usuarioId = new Views.UsuarioDePaginaHelper().GetUsuarioId(this.Context);

            var opcionesPaginacion = new OpcionesDePaginacionGridView(this.GridView);

            var lista = Envio.GetLista(usuarioId, opcionesPaginacion).AsQueryable();

            totalRowCount = opcionesPaginacion.TotalCount;

            return lista;
        }

        public IQueryable DropDownListTamanoDePaquete_SelectMethod()
        {
            return new CorreoSocialDbContext().TamanoDePaquetes.Where(x => x.Activo && !x.Borrado).OrderBy(x => x.NúmeroDeTamaño);
        }

        protected void LinkButtonNuevoEnvio_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Envios/NuevoEnvio");
        }

        protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int envioId;
            
            int.TryParse(e.CommandArgument.ToString(), out envioId);

            switch (e.CommandName.Trim().ToLower())
            { 
                case "borrar":
                    BorrarEnvio(envioId);
                    break;

                case "cancelarsolicitudderuta":
                    CancelarSolicitudDeRuta(envioId);
                    break;

                case "marcardespachado":
                    MarcarDespachado(envioId );
                    break;

                case "marcarrecibido":
                    Response.Redirect(Views.CalificarUsuarioURLHelper.GetURL(Envio.GetPorId(envioId).RutaDeEnvioAceptada, false, false));
                    break;

                case "cancelarenruta":
                case "cancelardespacho":
                    Response.Redirect(Views.CalificarUsuarioURLHelper.GetURL(Envio.GetPorId(envioId).RutaDeEnvioAceptada, true, false));
                    break;
            }
        }

        private void BorrarEnvio(int id)
        {
            Envio.Borrar(id);

            this.GridView.DataBind();
        }

        private void MarcarDespachado(int envioId)
        {
            Envio.MarcarDespachado(envioId);

            this.GridView.DataBind();
        }

        private void CancelarSolicitudDeRuta(int envioId)
        {
            Envio.CancelarSolicitudDeRuta(envioId);

            this.GridView.DataBind();
        }
    }
}